<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <button>点我</button>
</body>
<script>
    // 1- Null的环境：
    // 1-1对象原型链的终点
    // {
    //     // 1- 字面量对象
    //     // const obj = {};
    //     // console.log(obj.__proto__ === Object.prototype);
    //     // console.log(Object.prototype.__proto__)
    //
    //     // 2- 函数
    //     // function fn(){
    //     //
    //     // }
    //     //
    //     // console.log(fn.__proto__ === Function.prototype);
    //     // console.log(Function.prototype.__proto__ === Object.prototype);
    //     // console.log(Object.prototype.__proto__);
    //
    //     // 3- 构造函数创建的实例对象
    //     function Box(){
    //         this.a = 100;
    //     }
    //     Box.prototype.a = 200;
    //     Object.prototype.a = 300;
    //     const obj = new Box();
    //     console.log(obj.__proto__ === Box.prototype);
    //     console.log(Box.prototype.__proto__ === Object.prototype);
    //     console.log(Object.prototype.__proto__);
    //     console.log(obj.a);
    // }
    // 1-2获取不到DOM元素
    // {
    //     console.log(document.querySelector("button"));// null
    // }

    // 2-Null的使用场景：
    // 2-1-作为函数的参数，当你不想传，或者是不需要传参数时，可以使用null.
    // {
    //     const p1 = new Promise((resolve,reject)=>{
    //         reject(100);
    //     })
    //     p1.then(null,(reason)=>{
    //         console.log(reason)
    //     })
    // }


    // 2-2- 赋值
    // {
    //     // 当不知道初始值的值时，可以先给予null
    //     let userName=null;
    //     let age=null;
    // }
    // 2-3 内存回收
    // {
    //     const  btn = document.querySelector("button");
    //     btn.onclick = function(){
    //         console.log("click");
    //         this.onclick = null;
    //     }
    // }


    // * null和undefined的区别：
    // * undefined 代表变量没有赋值
    // * null 代表变量赋值，只是值为null

</script>
</html>